//
// JavaKnobParams
//
// Copyright (C) jextra.net.
//
//  This file is part of the Crack build system.
//
//  The Crack build system is free software; you can redistribute it 
//  and/or modify it under the terms of the GNU Lesser General Public
//  License as published by the Free Software Foundation; either
//  version 2.1 of the License, or (at your option) any later version.
//
//  The Crack build system is distributed in the hope that it will be 
//  useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
//  Lesser General Public License for more details.
//
//  You should have received a copy of the GNU Lesser General Public
//  License along with the Crack build system; if not, write to the Free
//  Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
//  02111-1307 USA.
//

package net.jextra.crack.java;

import java.io.*;
import java.util.*;
import net.jextra.crack.type.*;

/**
 * <p>
 * External information needed by {@link JavaKnob}.
 * </p>
 */
public interface JavaKnobParams
{
    /**
     * Root directories to the source code. e.g. /somewhere/myproject/src.
     */
    Collection<File> getSourceDirs();

    /**
     * Files to actually compile.
     */
    FileSet getSourceFileSet();

    /**
     * Root directories to the resources. e.g. /somewhere/myproject/resources. These might overlap getSourceDirs().
     */
    Collection<File> getResourceDirs();

    /**
     * Directory to the classes output dir. e.g. /somewhere/myproject/target/classes.
     */
    File getClassesDir();

    /**
     * Directory to the javadoc output dir. e.g. /somewhere/myproject/target/javadoc.
     */
    File getJavadocDir();

    /**
     * Root name of the packaged jar file to create for this project. e.g. mycomponent would be used to
     * create jar file name (e.g. mycomponent.jar).
     */
    String getBuildName();

    /**
     * Sub-dir under the build dir to place the build. e.g. /somewhere/myprojects/target/build/buildName/version
     */
    File getBuildDir();

    /**
     * Directory to the build output dir. e.g. /somewhere/myproject/target/shrinkwrap/buildName/version.
     */
    File getShrinkwrapDir()
        throws Exception;

    /**
     * Version number of this build (e.g. 1.0.0). This is used to store version number of MANIFEST of jar.
     */
    String getVersionNumber();

    Collection<File> getDependencies( String... scopes );
}
